package edu.upc.e402grupo02.e402grupo02.modelo.repository.impl;

import java.util.ArrayList;
import java.util.List;

import edu.upc.e402grupo02.e402grupo02.modelo.Acceso;
import edu.upc.e402grupo02.e402grupo02.modelo.Perfil;
import edu.upc.e402grupo02.e402grupo02.modelo.Usuario;
import edu.upc.e402grupo02.e402grupo02.repository.PerfilRepository;
import edu.upc.e402grupo02.e402grupo02.repository.UsuarioRepository;

public class UsuarioRepositoryImpl implements UsuarioRepository{

	public static List<Usuario> usuarios;
	
	static {
		usuarios = new ArrayList<Usuario>();
		Usuario u = new Usuario("Cesar", "clozza");
		List<Perfil> p = new ArrayList<Perfil>();
		p.add(PerfilRepositoryImpl.getPerfil(1));
		p.add(PerfilRepositoryImpl.getPerfil(2));
		u.setAdministrador(true);
		usuarios.add(u);
		
		u = new Usuario("Ricardo", "rrodriguez");
		p = new ArrayList<Perfil>();
		p.add(PerfilRepositoryImpl.getPerfil(1));
		p.add(PerfilRepositoryImpl.getPerfil(2));
		p.add(PerfilRepositoryImpl.getPerfil(3));
		u.setAdministrador(true);
		usuarios.add(u);
	}

	private PerfilRepository perfilRepository;
	
	public UsuarioRepositoryImpl() {
		perfilRepository = new PerfilRepositoryImpl();
	}
	
	public Usuario findByLogin(String login) {
		for(Usuario u : usuarios){
			if(u.getLogin().equals(login))
				return u;
		}
		return null;
	}

	public boolean asignarPerfil(Usuario usuario, Perfil perfil) {

		Usuario u = findByLogin(usuario.getLogin());
		if(u==null){
			System.out.println("Usuario no existe");
			return false;
		}
		Perfil p = perfilRepository.findById(perfil.getId());
		if(p==null){
			System.out.println("Perfil no existe");
			return false;
		}
		boolean existe = false;
		List<Perfil> perfiles = u.getPerfiles();
		for(Perfil per : perfiles){
			if(per.getId() == perfil.getId()){
				existe = true;
			}
		}
		if(existe){
			System.out.println("Ya existe el perfil en el usuario");
		}else{
			System.out.println("Se registro perfil en el usuario");
			perfiles.add(p);
			return true;
		}
		return false;
	}

	public boolean quitarPerfil(Usuario usuario, Perfil perfil) {
		Usuario u = findByLogin(usuario.getLogin());
		if(u==null){
			System.out.println("Usuario no existe");
			return false;
		}
		
		Perfil p = perfilRepository.findById(perfil.getId());
		if(p==null){
			System.out.println("Perfil no existe");
			return false;
		}
		
		boolean existe = false;
		List<Perfil> perfiles = u.getPerfiles();
		for(Perfil per : perfiles){
			if(per.getId() == perfil.getId()){
				existe = true;
			}
		}
		
		if(existe){
			perfiles.remove(p);
			return true;
			
		}else{
			System.out.println("No existe el perfil en el usuario");
		}

		return false;
	}

	public boolean tieneAcceso(Usuario usuario, int acceso) {
		//for( Usuario u : usuarios){
		//	if(u.getId().equals(usuario.getId())){
				for( Perfil p : usuario.getPerfiles() ){
					for(Acceso a : p.getAccesos()){
						if(a.getId() == acceso){
							return true;
						}
					}
				}
		//	}
		//}
		return false;
	}

	
	
}
